﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Csla
{
    /// <summary>
    /// 按排序号OrderNo进行逻辑排序的对象集合
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface IOrderedObjectCollection : IList
    {
        /// <summary>
        /// g 下一个新的对象，可以使用这个排序号
        /// </summary>
        int NextOrderNo { get; }

        /// <summary>
        /// 把指定的节点上/下移
        /// </summary>
        /// <param name="node"></param>
        /// <param name="isUp"></param>
        void MoveNode(IOrderedObject node, bool isUp);
        /// <summary>
        /// 按照OrderNo进行排序
        /// </summary>
        void SortByOrderNo();
        /// <summary>
        /// 按照物理位置把所有的OrderNo设置好。
        /// </summary>
        void SetOrderNoByIndex();

        ///// <summary>
        ///// 是否集合中的元素的OrderNo都是唯一的
        ///// </summary>
        //bool OrderNoDistinct { get; }
        ///// <summary>
        ///// 如果有重复的OrderNo的对象集合，
        ///// 则按照一定算法，
        ///// 把集合中的所有对象的OrderNo都变成唯一的。
        ///// </summary>
        //void DistinctOrderNo();

        ///// <summary>
        ///// 从这个索引开始的每个元素，OrderNo都加一
        ///// </summary>
        ///// <param name="index"></param>
        //void PlusOneFromIndex(int index);
        ///// <summary>
        ///// 从这个OrderNo开始的每个元素，OrderNo都加一
        ///// </summary>
        ///// <param name="index"></param>
        //void PlusOneFromOrderNo(int orderNo);
    }
    public interface IOrderedObjectCollection<T> : IOrderedObjectCollection, IList<T>
        where T : IOrderedObject
    { }
}
